import request from '@/config/axios'

// 代码提交 VO
export interface SubmissionVO {
  id: number // 提交ID
  sourceCode: string // 源代码
  languageId: number // 编程语言ID
  stdin: string // 标准输入数据
  expectedOutput: string // 预期输出结果
  stdout: string // 标准输出结果
  statusId: number // 运行状态ID
  createdAt: Date // 创建时间
  finishedAt: Date // 完成时间
  time: number // 运行耗时(秒)
  memory: number // 内存使用量(KB)
  stderr: string // 标准错误输出
  token: string // 提交令牌
  numberOfRuns: number // 运行次数
  cpuTimeLimit: number // CPU时间限制(秒)
  cpuExtraTime: number // CPU额外时间(秒)
  wallTimeLimit: number // 墙钟时间限制(秒)
  memoryLimit: number // 内存限制(KB)
  stackLimit: number // 栈空间限制(KB)
  maxProcessesAndOrThreads: number // 最大进程/线程数
  enablePerProcessAndThreadTimeLimit: boolean // 启用每进程/线程时间限制
  enablePerProcessAndThreadMemoryLimit: boolean // 启用每进程/线程内存限制
  maxFileSize: number // 最大文件大小(KB)
  compileOutput: string // 编译输出信息
  exitCode: number // 退出代码
  exitSignal: number // 退出信号
  message: string // 消息提示
  wallTime: number // 墙钟时间(秒)
  compilerOptions: string // 编译器选项
  commandLineArguments: string // 命令行参数
  redirectStderrToStdout: boolean // 重定向stderr到stdout
  callbackUrl: string // 回调URL
  additionalFiles: any[] // 附加文件(二进制)
  enableNetwork: boolean // 启用网络访问
  outfiles: string // 输出文件列表(逗号分隔)
  plusid: string // API文档附加ID，关联API文档信息
}

// 代码提交 API
export const SubmissionApi = {
  // 查询代码提交分页
  getSubmissionPage: async (params: any) => {
    return await request.get({ url: `/plus/submission/page`, params })
  },

  // 查询代码提交详情
  getSubmission: async (id: number) => {
    return await request.get({ url: `/plus/submission/get?id=` + id })
  },

  // 新增代码提交
  createSubmission: async (data: SubmissionVO) => {
    return await request.post({ url: `/plus/submission/create`, data })
  },

  // 修改代码提交
  updateSubmission: async (data: SubmissionVO) => {
    return await request.put({ url: `/plus/submission/update`, data })
  },

  // 删除代码提交
  deleteSubmission: async (id: number) => {
    return await request.delete({ url: `/plus/submission/delete?id=` + id })
  },

  // 导出代码提交 Excel
  exportSubmission: async (params) => {
    return await request.download({ url: `/plus/submission/export-excel`, params })
  }
}